#include <string>
#include <map>
#include <vector>
#include <iostream>
#include <sstream>

#ifndef TEMPLATE_H
#define TEMPLATE_H

#define TEMPLATE_LENGTH  512

#define isStructAttr(p,arp,type) p>=(char *)&(arp->type) && p<(char *)&(arp->type)+sizeof(arp->type)
#define TemplateReg(name)  n++;             \
            for(i=(char *)&(ap->name)-p;i<(char *)&(ap->name)-p+sizeof(ap->name);i++) {        \
                if(n!=beforeN){ nowColor=n%8; beforeN=n;}; \
                *(p+i)=nowColor;            \
            }                                                                                                   \
            templateNodeName[nowType][(char *)&(ap->name)-p]=(TEMPLATENOTE){nowColor,false,""#name""}; 

#define TemplateAdd(type)                                          \
        p = (char *) malloc(TEMPLATE_LENGTH);          \
       memset(p,0,sizeof(p));                                         \
        templateAttr[type]=p;                                               \
        n=0;  nowType=type;
//模板注释
typedef struct {
    int color;   //颜色
    bool isB;   //是否加粗    
    string name; //内容
//    string des;     //中文描述
} TEMPLATENOTE;

//属性模板 0x10="000001111000002220000",  多个字节 0表示没有颜色   其他表示字节所在位置所使用的颜色值
map<int,char*> templateAttr;
map<int,map<int,TEMPLATENOTE> > templateNodeName;
//模板注释以 行为单位的的一个缓冲  
vector<TEMPLATENOTE> templateNotes;

string template_getNodes(){
    string rt;
    if(getWinsize("col")<90){            templateNotes.clear();            return  rt;        }

    ostringstream in;  
    foreach(templateNotes,it) {
        in << getColor(0,it->color,it->isB) << it->name<< ",";
    }
    templateNotes.clear();
    in<<getColor();
    rt=in.str();
    return rt;
}

#endif      //  TEMPLATE_H